﻿Imports System.Runtime.CompilerServices
Imports System.Xml
Imports System.IO
Imports System.Net
Imports System.Runtime.Serialization.Json
Imports Sgml

Public Module HttpWebResponseExtention
    ''' <summary>
    ''' レスポンスをXHTMLとしてパースして取得します。
    ''' </summary>
    ''' <param name="res">取得元のHttpWebResponce</param>
    ''' <returns>パースされたXmlDocument</returns>
    ''' <remarks></remarks>
    <Extension()> _
    Public Function GetResponseAsXHtml(ByVal res As HttpWebResponse) As XmlDocument
        Dim xmlRes As XmlDocument = New XmlDocument()
        Dim sgmlr As New SgmlReader()
        Using srXml As New StreamReader(res.GetResponseStream())
            sgmlr.InputStream = srXml
            xmlRes.Load(sgmlr)
        End Using
        Return xmlRes
    End Function

    ''' <summary>
    ''' レスポンスをJSONとしてデシリアライズして取得します。
    ''' </summary>
    ''' <typeparam name="T">JSONでデシリアライズされる型</typeparam>
    ''' <param name="res">取得元のHttpWebResponce</param>
    ''' <returns>デシリアライズされたT</returns>
    ''' <remarks></remarks>
    <Extension()> _
    Public Function GetResponseAsJson(Of T)(ByVal res As HttpWebResponse) As T
        Dim json As New DataContractJsonSerializer(GetType(T))
        Dim jsonRsult As T = Nothing
        Using sRes As Stream = res.GetResponseStream()
            jsonRsult = DirectCast(json.ReadObject(sRes), T)
        End Using
        Return jsonRsult
    End Function
End Module
